package src.data.daos;


import java.util.HashSet;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import src.data.hbt.HibernateProvider;
import src.domain.Cuenta;
import src.domain.Deposito;



public class DepositoDAO {
	private HibernateProvider provider;

	private static DepositoDAO instance = null;

	public static DepositoDAO getInstance() {
		if (instance == null)
			instance = new DepositoDAO();
		return instance;
	}
	
	private DepositoDAO() {
		this.provider = HibernateProvider.getInstance();

	}
	
	@SuppressWarnings("unchecked")
	public Set<Deposito> getDepositos(Cuenta cuenta){
		Criteria criteria = provider.getSession().createCriteria(Deposito.class).add(Restrictions.like("cuentaId", cuenta.getCuentaId()));
		Set<Deposito> set = new HashSet<Deposito>();
		set.addAll(criteria.list());
		
		return set;
	}
	
	public Float getSumaDepositos(Cuenta cuenta){
		Criteria criteria = (provider.getSession().createCriteria(Deposito.class).add(Restrictions.like("cuentaId", cuenta.getCuentaId()))).setProjection(Projections.sum("monto"));
		return (Float)(criteria.list().toArray())[0];
		
	}
	
	public void save(Deposito deposito) {
		provider.getSession().save(deposito);
		
	}

	public void saveOrUpdate(Deposito deposito) {
		provider.getSession().saveOrUpdate(deposito);
		
	}

	public void update(Deposito deposito) {	
		provider.getSession().update(deposito);		
	}

	public void delete(Deposito deposito) {
		provider.getSession().delete(deposito);
	}
}
